/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package caintra.Sapra.Pantalla.QuincenalMensual;

import caintra.Sapra.Internacional.DBManager;
import caintra.Sapra.Model.Calendariofacturacionpracticantes;
import caintra.Sapra.Model.Empresa;
import caintra.Sapra.Model.Facturaajuste;
import caintra.Sapra.Model.MovimientosCaintra;
import caintra.Sapra.Model.Practicante;
import caintra.Sapra.Model.PrefacturaCaintra;
import caintra.Sapra.Model.PrefacturaDetalle;
import caintra.Sapra.Model.PrefacturaDetalleQM;
import caintra.Sapra.Model.PrefacturaQM;
import caintra.Sapra.Model.Usuario;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.sapra.dao.BanorteCuentas;
import org.sapra.dao.Polizaseguro;

/**
 *
 * @author Administrador
 */
public class PrefacturaMQueryQM {
    SimpleDateFormat formato=new SimpleDateFormat("yyyy-MM-dd");
    List<Calendariofacturacionpracticantes> lista;
    Calendariofacturacionpracticantes cf;
    List<Practicante> lista_pract;
    Practicante p;
    String sql="";
    public PrefacturaMQueryQM() {
        try {
            
        } catch (Exception e) {
        }
    }

    public Empresa getEmpresas(int empresaId){
        List<Empresa> lista_empresa;
        Empresa emp;
        try {
            sql="SELECT empresaId,razon_empresa,razon_factura,porcentaje_comision,rfc,fk_bancoId FROM empresa WHERE empresaId="+empresaId+""
                    + " AND suspendida=0 ORDER BY razon_empresa ASC";
            lista_empresa=DBManager.getQuery(Empresa.class,sql);
            if(lista_empresa != null && lista_empresa.size() >0){
                    emp=(Empresa)lista_empresa.get(0);
            }else{
                    return null;
            }
            


            


        } catch (Exception e) {
            return null;
        }
        return emp;

    }
    public List<Calendariofacturacionpracticantes> getPeriodos(int empresaId){
        List<Calendariofacturacionpracticantes> lista_cal;
        try {
            lista_cal=DBManager.getQuery(Calendariofacturacionpracticantes.class,"SELECT * "
                    + " FROM calendariofacturacionpracticantes  "
                    + " WHERE fk_empresaId="+empresaId+" ORDER BY dia_pago,calendarioFacturacionPracticantesId ASC ");
            

        } catch (Exception e) {
            return null;
        }
        return lista_cal;
    }

    public void getAbonos(){
        List<MovimientosCaintra> lista_cal;
        MovimientosCaintra m;
        sql="INSERT INTO movimientos_caintra(fk_empresaId,fk_periodoId,Cantidad,Comentarios,usuarioId,isAbono)VALUES";
        try {
            lista_cal=DBManager.getQuery(MovimientosCaintra.class,"select * from abono_empresa");
            if(!(lista_cal==null || lista_cal.isEmpty())){
                for(int i=0;i<lista_cal.size();i++){
                    m = (MovimientosCaintra)lista_cal.get(i);
                    sql+="("+m.getFk_empresaId()
                       + ","+m.getFk_periodoId()
                       + ","+m.getCantidad()
                       + ",'"+m.getComentarios()+"'"
                       + ","+m.getUsuarioId()
                       + ",1)";
                    if((i+1)<lista_cal.size())
                        sql+=",";
                }
                DBManager.insert(sql);
            }

        } catch (Exception e) {

        }
    }

    public List<MovimientosCaintra> getAdeudos(){
        List<MovimientosCaintra> lista_cal;
        MovimientosCaintra m;
        sql="INSERT INTO movimientos_caintra(fk_empresaId,fk_periodoId,Cantidad,Comentarios,usuarioId,isAbono)VALUES";
        try {
            lista_cal=DBManager.getQuery(MovimientosCaintra.class,"select * from adeudo_empresa");
            if(!(lista_cal==null || lista_cal.isEmpty())){
                for(int i=0;i<lista_cal.size();i++){
                    m = (MovimientosCaintra)lista_cal.get(i);
                    sql+="("+m.getFk_empresaId()
                       + ","+m.getFk_periodoId()
                       + ","+m.getCantidad()
                       + ",'"+m.getComentarios()+"'"
                       + ","+m.getUsuarioId()
                       + ",0)";
                    if((i+1)<lista_cal.size())
                        sql+=",";
                }
                DBManager.insert(sql);
            }


        } catch (Exception e) {
            return null;
        }
        return lista_cal;
    }

    public boolean actualizaCuenta(List<Practicante> lista,String numcuenta){
        Practicante p;
        int res=-1;
        sql="UPDATE banorte_cuentas set numCuenta='"+numcuenta+"' WHERE";
        try {
            if(lista.isEmpty())
                return false;
            for(int i=0;i<lista.size();i++){
                p=(Practicante)lista.get(i);
                sql+=" fk_practicanteId='"+p.getPracticanteId()+"'";
                if((i+1)<lista.size())
                    sql+=" OR ";
            }
            res=DBManager.Update(sql);
            if(res <=0)
                return false;
            else
                return true;
        } catch (Exception e) {
            return false;
        }

    }

    public void generacion_cuenta(int pract_new,int pract_old){
        List<BanorteCuentas> list_cuenta;
        BanorteCuentas cuenta;
        try {
            if(pract_old<=0){
                sql="SELECT getCuenta("+pract_new+") AS numCuenta";
            }else{
                sql="SELECT setCuenta("+pract_new+","+pract_old+") AS numCuenta";
            }
            list_cuenta=DBManager.getQuery(Polizaseguro.class,sql);
            if(list_cuenta.isEmpty()){
                return;
            }
        } catch (Exception e) {
        }


    }
    public List<Polizaseguro> getSeguro(List<Practicante> lista_p){
        List<Polizaseguro> lista_cal;
        Practicante p;
        try {
            for(int i=0;i<lista_p.size();i++){
                    p=(Practicante)lista_p.get(i);
                }
            lista_cal=DBManager.getQuery(Polizaseguro.class,sql);
        } catch (Exception e) {
            return null;
        }
        return lista_cal;
    }



    public Usuario getUsuario(int idusuario){
            List<Usuario> user;
            Usuario u;
            try {
                sql="SELECT * FROM usuario WHERE usuarioId="+idusuario;
                user=DBManager.getQuery(Usuario.class,sql);
                if(user != null && user.size() >0){
                    u=(Usuario)user.get(0);
                }else{
                    u=null;
                }
            } catch (Exception e) {
                return null;
            }
            return u;


    }

    public PrefacturaCaintra isPeriodo_Autorizado(int prefacturaId){
            List<PrefacturaCaintra> lista;
            PrefacturaCaintra p;
            try {
                sql="SELECT * FROM prefactura_caintra WHERE periodoId="+prefacturaId;
                lista=DBManager.getQuery(PrefacturaCaintra.class,sql);
                if(lista != null && lista.size() >0){
                    p=(PrefacturaCaintra)lista.get(0);
                    if(p.getTipo_factura() == 1)
                            return p;
                    else
                            return null;
                }else{
                    p=null;
                    return null;
                }
            } catch (Exception e) {
                return null;
            }

    }

        public PrefacturaQM isPeriodo_AutorizadoQM(int prefacturaId, int prefactura2Id){
            List<PrefacturaQM> lista;
            PrefacturaQM p;
            try {
                sql="SELECT * FROM prefactura_qm WHERE periodo1_Id="+prefacturaId+" AND periodo2_id="+prefactura2Id;
                //sql="SELECT * FROM prefactura_qm WHERE periodo2_id="+prefactura2Id;
                System.out.println(sql);
                lista=DBManager.getQuery(PrefacturaQM.class,sql);
                if(lista != null && lista.size() >0){
                    p=(PrefacturaQM)lista.get(0);
                    p.setPrefactura_qmId(lista.get(0).getPrefactura_qmId());
                    if(p.getTipo_factura() == 1)
                            return p;
                    else
                            return null;
                }else{
                    p=null;
                    return null;
                }
            } catch (Exception e) {
                return null;
            }

    }



    public List<PrefacturaDetalle> getFactura_Detalle(int prefacturaId){
        List<PrefacturaDetalle> lista_pd;
        //select * from prefactura_detalle WHERE fk_prefacturaId=;
        try {
                sql="SELECT * FROM prefactura_detalle WHERE fk_prefacturaId="+prefacturaId;
                lista_pd=DBManager.getQuery(PrefacturaDetalle.class,sql);

            } catch (Exception e) {
                return null;
            }
            return lista_pd;
    }

     public List<PrefacturaDetalleQM> getFactura_DetalleQM(int prefacturaId){
        List<PrefacturaDetalleQM> lista_pd;
        //select * from prefactura_detalle WHERE fk_prefacturaId=;
        try {
                sql="SELECT * FROM prefactura_detalleqm WHERE fk_prefactura_qmId="+prefacturaId;
                lista_pd=DBManager.getQuery(PrefacturaDetalleQM.class,sql);

            } catch (Exception e) {
                return null;
            }
            return lista_pd;
    }

    public List<Practicante> getFactura_Practicante(Calendariofacturacionpracticantes periodo){

        try {
            sql="SELECT p.practicanteId,p.nombre,p.paterno,p.materno,"
                    + " p.fec_inicioContrato,p.fec_terminoContrato,p.fec_cancelacion,p.sueldo AS sueldo,"
                    + " getCCosto(p.fk_centroCostoId) AS centrocosto,"
                    + " getDepto(p.fk_departamentoId) AS departamento,"
                    + " getCuenta(p.practicanteId) AS cuenta,"
                   // + " fixSeguro("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId),"
                    + " getPoliza("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId,1) AS seguroEmpresa,"
                    + " getPoliza("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId,0) AS seguroPracticante,"
                    + " getDia("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId,0) AS ajustedia, "
                    + " getDia("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId,1) AS deducciondia, "
                    + " getXMonto("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId,0) AS ajustemonto, "
                    + " getXMonto("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId,1) AS deduccionmonto,"
                    + " getFechaInicioFactura("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId) AS factura_inicio,"
                    + " getFechaTerminoFactura("+periodo.getCalendarioFacturacionPracticantesId()+",p.practicanteId) AS factura_fin"
                    + " FROM practicante p"
                    + " INNER JOIN departamento d"
                    + " ON p.fk_departamentoid=d.departamentoId"
                    + " INNER JOIN empresa e"
                    + " ON d.fk_empresaId=e.empresaId"
                    + " WHERE (fec_terminoContrato>='"+formato.format(periodo.getDia_inicio())+"'"
                    + " AND (p.fec_cancelacion IS NULL OR p.fec_cancelacion>='"+formato.format(periodo.getDia_inicio())+"')"
                    + " AND (p.fec_inicioContrato<='"+formato.format(periodo.getDia_fin())+"')) AND e.empresaId="+periodo.getFk_empresaId()+""
                    + " ORDER BY p.nombre,p.paterno,p.paterno,p.practicanteId,p.fec_inicioContrato,p.fec_terminoContrato,p.fec_cancelacion DESC";
            lista_pract=DBManager.getQuery(Practicante.class,sql);
            if(lista_pract != null)
                    return lista_pract;
            else
                return null;
        } catch (Exception e) {
            return null;
        }

    }
   

    public int insert_Total_Header(PrefacturaCaintra head,int periodo,Usuario u,int tipo_factura){
        int id_nuevo=-1;
        try {
            sql="INSERT INTO prefactura_caintra(monto_a_pagar,porcentaje,gasto_adm,subtotal_sin_seguro,seguro_empresa,"
                    + " adeudos_empresa,subtotal_conseguro,iva_1,total_1,abono_empresa,subtotal_con_abono,iva_2,total_final,"
                    + " tipo_factura,periodoId,usuarioId,login,fecha_aut,iva_factura,razon_social,razon_empresa"
                    + " ,rfc,comision,periodo)"
                    + "VALUES("+head.getMonto_a_pagar()+","+head.getPorcentaje()+","
                    + ""+head.getGasto_adm()+","+head.getSubtotal_sin_seguro()+","+head.getSeguro_empresa()+","
                    + ""+head.getAdeudos_empresa()+","+head.getSubtotal_conseguro()+","
                    + ""+head.getIva_1()+","+head.getTotal_1()+","+head.getAbono_empresa()+","
                    + ""+head.getSubtotal_con_abono()+","+head.getIva_2()+","+head.getTotal_final()+""
                    + ","+tipo_factura+","+periodo+","+u.getUsuarioId()+",'"+u.getLogin()+"',NOW()"
                    + ","+head.getIva_factura()
                    + ",'"+head.getRazon_social()+ "'"
                    + ",'"+head.getRazon_Empresa()+ "'"
                    + ",'"+head.getRfc()+ "'"
                    + ","+head.getComision()
                    + ",'"+head.getPeriodo()+ "'"
                    + ");";
            id_nuevo = DBManager.insert(sql);
        } catch (Exception e) {
            return -1;
        }
        return id_nuevo;

    }

    public int insert_Total_HeaderQM(PrefacturaQM head,int periodo,Usuario u,int tipo_factura){
        int id_nuevo=-1;
        try {
            sql="INSERT INTO prefactura_qm(monto_a_pagar,porcentaje,gasto_adm,subtotal_sin_seguro,seguro_empresa,"
                    + " adeudos_empresa,subtotal_con_seguro,iva_1,total_1,abono_empresa,subtotal_con_abono,iva_2,total_final,"
                    + " tipo_factura,usuarioId,login,fecha_aut,iva_factura,razon_social,razon_empresa"
                    + " ,rfc,comision,periodo_1, periodo1_Id, periodo_2, periodo2_id)"
                    + "VALUES("+head.getMonto_a_pagar()+","+head.getPorcentaje()+","
                    + ""+head.getGasto_adm()+","+head.getSubtotal_sin_seguro()+","+head.getSeguro_empresa()+","
                    + ""+head.getAdeudos_empresa()+","+head.getSubtotal_conseguro()+","
                    + ""+head.getIva_1()+","+head.getTotal_1()+","+head.getAbono_empresa()+","
                    + ""+head.getSubtotal_con_abono()+","+head.getIva_2()+","+head.getTotal_final()+""
                    + ","+tipo_factura+","+u.getUsuarioId()+",'"+u.getLogin()+"',NOW()"
                    + ","+head.getIva_factura()
                    + ",'"+head.getRazon_social()+ "'"
                    + ",'"+head.getRazon_empresa()+ "'"
                    + ",'"+head.getRfc()+ "'"
                    + ","+head.getComision()
                    + ",'"+head.getPeriodo_1()+ "',"
                    + +head.getPeriodo1_id()+ ",'"
                    + head.getPeriodo_2()+"',"+head.getPeriodo2_id()
                    + ");";
             System.out.println(sql);
            id_nuevo = DBManager.insert(sql);
            System.out.println(sql);
        } catch (Exception e) {
            return -1;
        }
        return id_nuevo;

    }

    public int insertTotales(List<PrefacturaDetalle> total,int id){
        int res=-1;
        PrefacturaDetalle pd;
        sql="INSERT INTO prefactura_detalle(nombre,paterno,materno,centrocosto,fec_inicio,fec_termino,"
                + " dias_a_pagar,monto_beca,monto_pagar,neto,seg_emp,seg_pract,ajuste,deduccion,practicante_Id,fk_prefacturaId"
                + ",cuenta,departamento,fec_baja)VALUES";
        try {
            if(total.size()<= 0)
                return -1;
            for(int i=0;i < total.size();i++){
                pd=(PrefacturaDetalle)total.get(i);
                sql+="('"+pd.getNombre()+"','"+pd.getPaterno()+"','"+pd.getMaterno()+"',"
                        + "'"+pd.getCentrocosto()+"','"+pd.getFec_inicio()+"','"+pd.getFec_termino()+"',"+pd.getDias_a_pagar()+","
                        + ""+pd.getMonto_beca()+","+pd.getMonto_pagar()+","
                        + ""+pd.getNeto()+","+pd.getSeg_emp()+","+pd.getSeg_pract()+","
                        + ""+pd.getAjuste()+","+pd.getDeduccion()+","+pd.getPracticante_Id()+","+id+""
                        + ",'"+pd.getCuenta()+"'"
                        + ",'"+pd.getDepartamento()+"'"
                        + ",'"+pd.getFec_baja()+"'"
                        + ")";
                        if((i+1)<total.size())
                            sql+=",";
                    System.out.println(sql);
            }
            res=DBManager.insert(sql);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return -1;
        }
        return res;

    }

    public int insertTotalesQM(List<PrefacturaDetalleQM> total,int id){
        int res=-1;
        PrefacturaDetalleQM pd;
        sql="INSERT INTO prefactura_detalleqm(cuenta,nombre,paterno,materno,centro_costo,fec_inicio,fec_termino, fec_cancelacion,"
                + " dias_a_pagar, monto_beca,monto_pagar,pagar_1,ajustes_1,deducciones_1,pagar_2, ajustes_2, deducciones_2, seguro_empresa,seguro_practicante,practicanteId,fk_prefactura_qmId, neto1, neto2"
                + ")VALUES";
        try {
            if(total.size()<= 0)
                return -1;
            for(int i=0;i < total.size();i++){
                pd=(PrefacturaDetalleQM)total.get(i);
                sql+="('"+pd.getCuenta()+"','"+pd.getNombre()+"','"+pd.getPaterno()+"','"+pd.getMaterno()+"',"
                        + "'"+pd.getCentro_costo()+"','"+pd.getFec_inicio()+"','"+pd.getFec_termino()+"','"+pd.getFec_termino()+"',"+pd.getDias_a_pagar()+","
                        + ""+pd.getMonto_beca()+","+pd.getMonto_pagar()+","
                        + ""+pd.getPagar_1()+","+pd.getAjustes_1()+","+pd.getDeducciones_1()+","
                        + ""+pd.getPagar_2()+","+pd.getAjustes_2()+","+pd.getDeducciones_2()+","+pd.getSeguro_empresa()+","+pd.getSeguro_practicante()+","+pd.getPracticanteId()+","+id+","+pd.getNeto1()+","+pd.getNeto2()
                        + ")";
                        if((i+1)<total.size())
                            sql+=",";

            }
            System.out.println(sql);
            res=DBManager.insert(sql);
        } catch (Exception e) {
            return -1;
        }
        return res;

    }
    public boolean deleteFactura(int id){
        try {
            sql="delete from prefactura_caintra where prefacturaId="+id;
            DBManager.Update(sql);
        } catch (Exception e) {
            return false;
        }
        return true;

    }



     public boolean deletePeriodoFacturaQM(int id){
        try {
            sql="delete from prefactura_qm where periodo2_Id="+id;
            DBManager.Update(sql);
        } catch (Exception e) {
            return false;
        }
        return true;

    }

          public boolean deleteDetalleQM(int id){
        try {
            sql="delete from prefactura_detalleqm where fk_prefactura_qmId="+id;
            DBManager.Update(sql);
        } catch (Exception e) {
            return false;
        }
        return true;

    }

    public boolean updatePoliza(int opc,int periodo){
        try {
            sql="UPDATE polizaseguro SET pagado="+opc+"  WHERE fk_prefacturaId="+periodo+" AND fec_cancelacion IS NULL";
            DBManager.Update(sql);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    public void cancelarPoliza(int prac_id,int factura_id,int opc){
            try {
                if(opc == 1)
                    sql="UPDATE polizaseguro SET fec_cancelacion=now()  WHERE fk_practicanteId="+prac_id+" AND fk_prefacturaId="+factura_id;
                else
                     sql="UPDATE polizaseguro SET fec_cancelacion=now()  WHERE fk_practicanteId="+prac_id+" AND fk_prefacturaId="+factura_id;


            } catch (Exception e) {

            }

    }

    public List<BanorteCuentas> getCuenta(int opc,String num) {
        List<BanorteCuentas> resp = null;
        String sql = "SELECT * FROM banorte_cuentas";
        if(opc==0)
            sql += " ORDER BY nombre";
        else
            sql += " where numCuenta='"+num+"'";

        try {
            // Busca las Universidades
            resp = DBManager.getQuery(BanorteCuentas.class,sql);
            System.out.println(sql);
        } catch (Exception ex) {
            Logger.getLogger(BanorteCuentas.class.getName()).log(Level.SEVERE, null, ex);
        }

        return resp;
    }

     public List<Facturaajuste> getAjustes(int conv, int per){
        List<Facturaajuste> lista;
        Facturaajuste aj;
        String sql="";
        Practicante p;
        try {
            sql="SELECT * FROM facturaajuste where fk_convenioId="+conv+" and fk_periodoid="+per+" and cometario='CONCEPTO DE RETROACTIVO';";

            lista=DBManager.getQuery(Facturaajuste.class,sql);

        } catch (Exception e) {
            return null;
        }
        return lista;

    }
 
}
